//****************************************************************
//* Copyright (c) 2004 Ford Motor Company. All Rights Reserved.
//*
//* $$Workfile:   ProductionVolumesMixFacade.java  $$
//* $$Revision:   1.4  $$
//* $$Author:   TMALDON4  $$
//* $$Date:   Mar 25 2009 09:34:52  $$
//*
//*****************************************************************
package ar.com.ford.it.fullEconomics.facade;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Collection;
import ar.com.ford.it.fullEconomics.exception.FullEconomicsException;
import ar.com.ford.it.fullEconomics.logic.ProductionVolumesMixLogic;
import ar.com.ford.it.fullEconomics.persistence.dto.Ncas003ColorVw;
import ar.com.ford.it.fullEconomics.persistence.dto.Ncas012VehicleVw;
import ar.com.ford.it.fullEconomics.persistence.dto.Ncas101CatalogVw;
import ar.com.ford.it.fullEconomics.persistence.dto.Teesg01Plant;
import ar.com.ford.it.fullEconomics.persistence.dto.Teesp11Volume;
import ar.com.ford.it.fullEconomics.persistence.dto.Teesr03Agreement;
import ar.com.ford.it.fullEconomics.struct.AgreementVolumesStruct;
import ar.com.ford.it.fullEconomics.struct.ShowCatalogsStruct;
import ar.com.ford.it.fullEconomics.wslx.FullEconomicsWslxUser;
import com.ford.it.persistence.PersistenceException;

public class ProductionVolumesMixFacade {

	/**
	 * Genera el proceso de Production Volumes Mix para los parametros
	 * seleccionados
	 * 
	 * @param vehicleLine
	 * @param fecha
	 * @param color
	 * @throws FullEconomicsException
	 */
	public void createProcesoMix(Ncas012VehicleVw vehicleLine,
			Timestamp fechaPrimerDiaProximoAnio,
			Timestamp fechaUltimoDiaDelMes, Timestamp fechaAntUltimoDiaDelMes,
			Timestamp fechaPrimerDiaDelMes, Ncas003ColorVw color,
			Teesg01Plant teesg01Plant, FullEconomicsWslxUser user)
			throws FullEconomicsException {
		ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();
		logic.createProcesoMix(vehicleLine, fechaPrimerDiaProximoAnio,
				fechaUltimoDiaDelMes, fechaAntUltimoDiaDelMes,
				fechaPrimerDiaDelMes, color, teesg01Plant, user);
	}

	/**
	 * Genera el proceso de mix para los pendientes
	 * 
	 * @param teesg01Plant
	 * @param user
	 * @throws FullEconomicsException
	 */
	public void processMix(Teesg01Plant teesg01Plant, FullEconomicsWslxUser user)
			throws FullEconomicsException {
		ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();
		//logic.processMixProcess(teesg01Plant, user);
		logic.processMixProcessBySfi(teesg01Plant, user);
	}

	/**
	 * Obtienve los volumenes por los parametros seleccionados
	 * 
	 * @param teesg01Plant
	 * @param fecha
	 * @param Ncas012VehicleVw
	 * @param color
	 * @return
	 * @throws PersistenceException
	 */
	public Collection<ShowCatalogsStruct> getShowCatalogsStructByPlantFechaVehicleColor(
			Teesg01Plant teesg01Plant, Timestamp fecha,
			Ncas012VehicleVw vehicleLine, Ncas003ColorVw color)
			throws FullEconomicsException {
		ProductionVolumesMixLogic productionVolumesMixLogic = new ProductionVolumesMixLogic();
		return productionVolumesMixLogic.getShowCatalogsStructByPlantFechaVehicleColor(teesg01Plant,
				fecha, vehicleLine, color);
	}
	

    /**
     * Obtiene el volumen por pk
     * 
     * @param 
     * @return
     * @throws FullEconomicsException
     */
    public Teesp11Volume findVolumeByPK(Teesp11Volume volume)
            throws FullEconomicsException {
        ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();
        Teesp11Volume result = new Teesp11Volume();
        result = logic.findVolumeByPK(volume);
        return result;
    }
    
    /**
     * Actualiza el volumen pasado por parametro
     * 
     * @param volumen
     * @param user
     * Usuario que actualiza el volumen
     * @throws FullEconomicsException
     */
    public void updateVolume(Teesp11Volume volume,
                               FullEconomicsWslxUser user)
            throws FullEconomicsException {
        
    	ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();

        logic.updateVolumen(volume, user);
    }
    
    /**
     * Guarda un nuevo volumen
     * 
     * @param volumen
     * @param user
     * @throws FullEconomicsException
     */
    public void saveVolume(Ncas101CatalogVw catalog,Integer cantActual,Integer cantForecast, 
                               FullEconomicsWslxUser user, Timestamp fecha)
            throws FullEconomicsException {
        
    	ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();

        logic.saveVolume(catalog, cantActual, cantForecast, user, fecha);
    }
    
    /**
     * 
     * 
     * @param volumen
     * @param user
     * @throws FullEconomicsException
     */
    public BigDecimal getVolumeByVehicleLine(Timestamp fechaInicio,
                                            Timestamp fechaFin, Teesg01Plant teesg01Plant,
                                            Ncas012VehicleVw vehicleLine)
            throws FullEconomicsException {
        
        BigDecimal ret = null;
        ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();

        ret = logic.getVolumeByVehicleLine(fechaInicio, fechaFin, teesg01Plant, vehicleLine);
        return ret;
    }
    
    /**
     * Obtiene el volumen por catalogo fecha y planta
     * 
     * @param 
     * @return
     * @throws FullEconomicsException
     */
    public Collection<Teesp11Volume> findVolumeByCatalogDatePlant(Ncas101CatalogVw catalog, Timestamp fecha, Teesg01Plant teesg01Plant)
            throws FullEconomicsException {
        ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();
        return logic.findVolumeByCatalogDatePlant(catalog, fecha, teesg01Plant);
    }
    
    /**
     * Obtiene el volumen para el reporte de agreements
     * 
     * @param 
     * @return
     * @throws FullEconomicsException
     */
    public AgreementVolumesStruct getVolumesForReport(Teesr03Agreement agreement, Collection<Ncas012VehicleVw> lines)
            throws FullEconomicsException {
        ProductionVolumesMixLogic logic = new ProductionVolumesMixLogic();
        return logic.getVolumesForReport(agreement, lines);
    }
}
